#COMPILER PBWIN 9 #COMPILE EXE #REGISTER NONE #DIM ALL #RESOURCE "VPC.PBR" $VER = "1.1" '------------------------------------------------------------------------------ ' Include files '------------------------------------------------------------------------------ %USEMACROS = 1 #INCLUDE ONCE "Win32API.inc" #INCLUDE ONCE "CommCtrl.inc" #INCLUDE ONCE "InitCtrl.inc" #INCLUDE ONCE "SavePos.inc" #INCLUDE ONCE "DragnDrop.inc" #INCLUDE ONCE "ReadShortcut.inc" #INCLUDE ONCE "CreateShortcut.inc" #INCLUDE ONCE "Registry.inc" '------------------------------------------------------------------------------ ' Initial Declares - eliminate unnecessary macros in COMMCTRL.INC '------------------------------------------------------------------------------ %NOANIMATE = 1 ' Animate control %NOBUTTON = 1 ' Button %NOCOMBO = 1 ' Combo box %NOCOMBOEX = 1 ' ComboBoxEx %NODATETIMEPICK = 1 ' Date/time picker %NODRAGLIST = 1 ' Drag list control %NOEDIT = 1 ' Edit control %NOFLATSBAPIS = 1 ' Flat scroll bar %NOHEADER = 1 ' Header control %NOHOTKEY = 1 ' HotKey control %NOIMAGELIST = 1 ' Image APIs %NOIPADDRESS = 1 ' IP Address edit control %NOLIST = 1 ' List box control %NOMENUHELP = 1 ' Menu help %NOMONTHCAL = 1 ' MonthCal %NOMUI = 1 ' MUI %NONATIVEFONTCTL = 1 ' Native Font control %NOPAGESCROLLER = 1 ' Pager %NOPROGRESS = 1 ' Progress control %NOREBAR = 1 ' Rebar control %NOSTATUSBAR = 1 ' Status bar %NOTABCONTROL = 1 ' Tab control %NOTOOLBAR = 1 ' Tool bar %NOTOOLTIPS = 1 ' Tool tips %NOTRACKBAR = 1 ' Track bar %NOTRACKMOUSEEVENT = 1 ' Track Mouse Event %NOTREEVIEW = 1 ' TreeView %NOUPDOWN = 1 ' Up Down arrow control '------------------------------------------------------------------------------ ' Equates '------------------------------------------------------------------------------ %IDC_LABEL1 = %WM_USER + 2110 ' control ids %IDC_BTNPATH = %WM_USER + 2120 %IDC_BTNCONV = %WM_USER + 2121 %IDC_TXT1 = %WM_USER + 2140 %IDC_TXT2 = %WM_USER + 2141 '------------------------------------------------------------------------------ ' Global variables '------------------------------------------------------------------------------ GLOBAL ghDlg AS DWORD ' main dialog's handle GLOBAL ghIcon AS DWORD ' main dialog's icon handle GLOBAL gStartPath AS STRING ' path of video folder GLOBAL VlcPorPath AS STRING GLOBAL VlcLocPath AS STRING '------------------------------------------------------------------------------ ' Util functions '------------------------------------------------------------------------------ SUB SetNewPath() LOCAL i AS LONG ' Set new start path gStartPath = RTRIM$(gStartPath, ANY "\/") + "\" i = CountEligibleShortcuts() IF i = 0 THEN CONTROL SET TEXT ghDlg, %IDC_LABEL1, _ "No VLC shortcuts found in this folder..." CONTROL SET COLOR ghDlg, %IDC_LABEL1, %RED, -1 CONTROL DISABLE ghDlg, %IDC_BTNCONV ELSE CONTROL SET TEXT ghDlg, %IDC_LABEL1, _ "VLCPortable found. Ready to convert " + FORMAT$(i) + " shortcuts." CONTROL SET COLOR ghDlg, %IDC_LABEL1, -1, -1 CONTROL SET TEXT ghDlg, %IDC_TXT1, LEFT$(gStartPath, -1) CONTROL ENABLE ghDlg, %IDC_BTNCONV END IF END SUB '------------------------------------------------------------------------------ FUNCTION EXISTS(BYVAL fileOrFolder AS STRING) AS LONG LOCAL Dummy& Dummy& = GETATTR(fileOrFolder) FUNCTION = (ERRCLEAR = 0) END FUNCTION '------------------------------------------------------------------------------ SUB GetVlcPaths() LOCAL r AS STRING ' Get path for VLCPortable VlcPorPath = DIR$(EXE.PATH$ + "VlcPortable*", ONLY %SUBDIR) : DIR$ CLOSE IF VlcPorPath <> "" THEN VlcPorPath = EXE.PATH$ + VlcPorPath + "\" r = DIR$(VlcPorPath + "VLC*.exe") : DIR$ CLOSE IF r <> "" THEN VlcPorPath += r ELSE VlcPorPath = "" END IF ' Get path for local VLC VlcLocPath = GETREGVALUE(%HKEY_LOCAL_MACHINE, "SOFTWARE\VideoLAN\VLC", "") END SUB '------------------------------------------------------------------------------ FUNCTION CountEligibleShortcuts() AS LONG LOCAL Link AS LinkType LOCAL e AS STRING LOCAL n AS LONG e = DIR$(gStartPath + "*.lnk") WHILE e <> "" Link.zLinkName = (e) Link.zLinkFolder = (gStartPath) LinkQuery(Link) IF ISTRUE INSTR(Link.zExeName, "vlc.exe") THEN INCR n e = DIR$(NEXT) WEND DIR$ CLOSE FUNCTION = n END FUNCTION '------------------------------------------------------------------------------ SUB ConvertAllShortcuts() LOCAL Link AS LinkType LOCAL e AS STRING IF VlcPorPath = "" THEN EXIT SUB e = DIR$(gStartPath + "*.lnk") WHILE e <> "" Link.zLinkName = (e) Link.zLinkFolder = (gStartPath) LinkQuery(Link) IF ISTRUE INSTR(Link.zExeName, "vlc.exe") THEN ' Overwrite shortcut CreateShortcut _ gStartPath + e, _ ' 1. the link file to be created VlcPorPath, _ ' 2. the file/document where the shortcut should point to Link.zArguments, _ ' 3. command-line parameters Link.zWorkDir, _ ' 4. the folder where the executable file should start in %SW_SHOW, _ ' 5. %SW_SHOW, %SW_HIDE etc. VlcPorPath, _ ' 6. icon file or executable file containing an icon 0, _ ' 7. icon index in the aforementioned file ("(c) mougino.free.fr 2025") ' 8. any comment (stored in the shortcut) END IF e = DIR$(NEXT) WEND DIR$ CLOSE END SUB '------------------------------------------------------------------------------ ' Main callback '------------------------------------------------------------------------------ CALLBACK FUNCTION DlgProc () AS LONG LOCAL t AS STRING LOCAL r AS STRING LOCAL i AS LONG ' Callback handlers CB_SAVEPOS CB_DRAGNDROP SELECT CASE CB.MSG CASE %WM_SETCURSOR ' change cursor to link-hand when hovering over icons i = GetDlgCtrlId(CB.WPARAM) IF i = %IDC_TXT2 THEN SetCursor LoadCursor(%NULL, BYVAL %IDC_HAND) SetWindowLong CB.HNDL, %dwl_msgresult, 1 FUNCTION = 1 END IF CASE %WM_INITDIALOG IF VlcPorPath = "" THEN CONTROL DISABLE ghDlg, %IDC_BTNPATH CONTROL SET TEXT CB.HNDL, %IDC_LABEL1, _ "No VLCPortable* folder found near this program." CONTROL SET COLOR CB.HNDL, %IDC_LABEL1, %RED, -1 END IF CASE %WM_COMMAND IF CB.CTLMSG <> %BN_CLICKED THEN EXIT SELECT SELECT CASE CB.CTL CASE %IDCANCEL DIALOG END CB.HNDL CASE %IDC_TXT2 IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN ShellExecute %NULL, "open", "http://mougino.free.fr/freeware", "", "", %SW_SHOW END IF CASE %IDC_BTNPATH ' Change path of video folder DISPLAY BROWSE CB.HNDL,,, "", "", %BIF_RETURNONLYFSDIRS _ OR %BIF_DONTGOBELOWDOMAIN OR %BIF_NONEWFOLDERBUTTON _ TO gStartPath IF LEN(gStartPath) THEN SetNewPath() END IF CASE %IDC_BTNCONV ' Convert all shortcuts to Portable VLC i = CountEligibleShortcuts() IF i <> 0 THEN ConvertAllShortcuts() CONTROL SET TEXT CB.HNDL, %IDC_LABEL1, _ FORMAT$(i) + " shortcuts successfully converted!" CONTROL SET COLOR CB.HNDL, %IDC_LABEL1, -1, -1 ELSE CONTROL SET TEXT CB.HNDL, %IDC_LABEL1, _ "No VLC shortcuts found in this folder..." CONTROL SET COLOR CB.HNDL, %IDC_LABEL1, %RED, -1 END IF CONTROL DISABLE CB.HNDL, %IDC_BTNCONV END SELECT CASE %WM_DESTROY END SELECT END FUNCTION '------------------------------------------------------------------------------ ' Main entry point for the application '------------------------------------------------------------------------------ FUNCTION PBMAIN () AS LONG LOCAL r AS STRING ' Get VLC paths (Portable near program and Local from registry) GetVlcPaths() ' Initialize the common control library with standard Windows classes InitComCtl32 ' Create dialog DIALOG NEW %HWND_DESKTOP, EXE.NAME$ + $SPC + $VER,,, 258, 40, _ %WS_CAPTION OR %WS_MINIMIZEBOX OR %WS_SYSMENU, 0 TO ghDlg DIALOG SET ICON ghDlg, "ICO1" CONTROL ADD LABEL, ghDlg, -1, "Folder :", 5, 6, 35, 12 CONTROL ADD TEXTBOX, ghDlg, %IDC_TXT1, "", 40, 4, 150, 12 r = "VLCPortable found. Browse for a folder or drag'n drop one here ^" CONTROL ADD LABEL, ghDlg, %IDC_LABEL1, r, 5, 22, 200, 10, _ %SS_PATHELLIPSIS OR %WS_CHILD OR %WS_VISIBLE, %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD BUTTON, ghDlg, %IDC_BTNPATH, "...", 190, 4, 12, 12 CONTROL ADD BUTTON, ghDlg, %IDC_BTNCONV, "&Convert", 212, 6, 40, 18, %WS_TABSTOP OR %BS_DEFAULT CONTROL DISABLE ghDlg, %IDC_BTNCONV CONTROL ADD LABEL, ghDlg, %IDC_TXT2, "[?]", 246, 29, 8, 12, %SS_NOTIFY CONTROL SET COLOR ghDlg, %IDC_TXT2, %BLUE, -1 ' Show dialog DIALOG SHOW MODAL ghDlg CALL DlgProc END FUNCTION '------------------------------------------------------------------------------ ' File dropped management '------------------------------------------------------------------------------ SUB FileDropped(BYVAL myfile AS STRING) LOCAL hSearch AS DWORD ' Search handle LOCAL WFD AS WIN32_FIND_DATA ' FindFirstFile structure LOCAL imglst AS STRING ' Path to existing image list LOCAL xt AS STRING ' File extension LOCAL r AS STRING ' Cmd result LOCAL i AS LONG ' Enumerator IF VlcPorPath = "" THEN EXIT SUB hSearch = FindFirstFile((myfile), WFD) ' Get search handle FindClose hSearch IF hSearch <> %INVALID_HANDLE_VALUE THEN IF (WFD.dwFileAttributes AND _ %FILE_ATTRIBUTE_DIRECTORY) _ ' If it's a directory = %FILE_ATTRIBUTE_DIRECTORY THEN gStartPath = myfile ' Set the path SetNewPath() END IF END IF END SUB